package com.orangeforms.webadmin.app.model;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.orangeforms.common.core.annotation.RelationDict;
import com.orangeforms.common.core.base.mapper.BaseModelMapper;
import com.orangeforms.webadmin.app.vo.SysContractInfoVo;
import lombok.Data;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.math.BigDecimal;
import java.util.Date;
import java.util.Map;

/**
 * SysContractInfo实体对象。
 *
 * @author xisheng
 * @date 2022-08-15
 */
@Data
@TableName(value = "sys_contract_info")
public class SysContractInfo {

    /**
     * ID，唯一。
     */
    @TableId(value = "id")
    private Long id;

    /**
     * 项目id。
     */
    @TableField(value = "project_id")
    private Long projectId;

    /**
     * 合同段类型。
     */
    private Integer type;

    /**
     * 编号。
     */
    private String no;

    /**
     * 编码。
     */
    private String code;

    /**
     * 名称。
     */
    private String name;

    /**
     * 施工单位。
     */
    @TableField(value = "construction_org")
    private Long constructionOrg;

    /**
     * 负责人。
     */
    private String principal;

    /**
     * 监理单位。
     */
    @TableField(value = "supervisor_org")
    private Long supervisorOrg;

    /**
     * 起始桩号。
     */
    @TableField(value = "start_pile_no")
    private String startPileNo;

    /**
     * 终止桩号。
     */
    @TableField(value = "end_pile_no")
    private String endPileNo;

    /**
     * 长度（KM）。
     */
    @TableField(value = "road_length")
    private Double roadLength;

    /**
     * 合同金额（mps）。
     */
    @TableField(value = "contract_price")
    private BigDecimal contractPrice;

    /**
     * 合同签订日期。
     */
    @TableField(value = "contract_sign_date")
    private Date contractSignDate;

    /**
     * 开工日期。
     */
    @TableField(value = "start_date")
    private Date startDate;

    /**
     * 计划竣工日期。
     */
    @TableField(value = "plan_end_date")
    private Date planEndDate;

    /**
     * 计划交工日期。
     */
    @TableField(value = "plan_finish_date")
    private Date planFinishDate;

    /**
     * 银行名称。
     */
    @TableField(value = "bank_name")
    private String bankName;

    /**
     * 银行账户名称。
     */
    @TableField(value = "bank_account_name")
    private String bankAccountName;

    /**
     * 账号。
     */
    @TableField(value = "bank_account")
    private String bankAccount;

    /**
     * 状态 1:未开工，2:建设中, 3:已交工, 4:已竣工。
     */
    private Integer state;

    /**
     * 简称。
     */
    private String shorthand;

    /**
     * 修正计量金额误差（mps）。
     */
    @TableField(value = "fix_measure_amount")
    private Integer fixMeasureAmount;

    /**
     * 项目是否可用，二进制-右边起：1-一体化，2-前期；3-进度；4-计量；5-征地；6-合同；7-农民工；8-安全；9-质量；10-电子档案；11-质保资料。
     */
    @TableField(value = "enable_flag")
    private Long enableFlag;

    @RelationDict(
            masterIdField = "projectId",
            slaveServiceName = "sysProjectService",
            slaveModelClass = SysProject.class,
            slaveIdField = "id",
            slaveNameField = "shorthand")
    @TableField(exist = false)
    private Map<String, Object> projectIdDictMap;

    @RelationDict(
            masterIdField = "constructionOrg",
            slaveServiceName = "sysOrgService",
            slaveModelClass = SysOrg.class,
            slaveIdField = "orgId",
            slaveNameField = "name")
    @TableField(exist = false)
    private Map<String, Object> constructionOrgDictMap;

    @Mapper
    public interface SysContractInfoModelMapper extends BaseModelMapper<SysContractInfoVo, SysContractInfo> {
    }
    public static final SysContractInfoModelMapper INSTANCE = Mappers.getMapper(SysContractInfoModelMapper.class);
}
